﻿IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'ReporteVentas')
	BEGIN
		DROP  Procedure  ReporteVentas
	END

GO

CREATE Procedure ReporteVentas

	(
		@FechaDesde datetime,
		@FechaHasta datetime,
		@Cliente int = NULL,
		@Documento int = NULL,
		@Serie nchar(4) = NULL,
		@Numero int = NULL,
		@Personal int = NULL,
		@Estado char(1) = NULL
	)

AS
BEGIN

	SELECT     
		dbo.Ventas.ventaID AS ID, 
		dbo.Ventas.fechaEmision AS Fecha, 
		CASE
			WHEN dbo.Correlativos.tipoDocumento = 0 THEN 'Boleta'
			WHEN dbo.Correlativos.tipoDocumento = 1 THEN 'Factura'
		END AS Documento, 
		dbo.Correlativos.serie AS Serie, 
		dbo.Ventas.numero AS Numero, 
		dbo.Clientes.apellidos + ' ' + dbo.Clientes.nombres AS Cliente, 
		dbo.Personal.apellidos + ' ' + dbo.Personal.nombres AS Vendedor, 
		dbo.Ventas.estado AS Estado,
        dbo.Productos.nombre AS Producto, 
        dbo.DetallesVentasProductos.cantidad AS Cantidad, 
        dbo.DetallesVentasProductos.precioUnitario AS Precio, 
        dbo.DetallesVentasProductos.cantidad * dbo.DetallesVentasProductos.precioUnitario AS Total
	FROM dbo.Ventas 
	INNER JOIN dbo.DetallesVentasProductos ON dbo.Ventas.ventaID = dbo.DetallesVentasProductos.ventaID 
	INNER JOIN dbo.Clientes ON dbo.Ventas.clienteID = dbo.Clientes.clienteID 
	INNER JOIN dbo.Personal ON dbo.Ventas.personalID = dbo.Personal.personalID  
	INNER JOIN dbo.Productos ON dbo.DetallesVentasProductos.productoID = dbo.Productos.productoID 
	INNER JOIN dbo.Correlativos ON dbo.Ventas.correlativoID = dbo.Correlativos.correlativoID
	WHERE (dbo.Ventas.fechaEmision >= @FechaDesde AND dbo.Ventas.fechaEmision <= @FechaHasta) AND
	CASE
		WHEN @Cliente IS NULL THEN 1
		WHEN @Cliente = dbo.Ventas.clienteID THEN 1
		ELSE 0
	END = 1 AND
	CASE
		WHEN @Documento IS NULL THEN 1
		WHEN @Documento = CONVERT(int, dbo.Correlativos.tipoDocumento) THEN 1
		ELSE 0	
	END = 1 AND
	CASE 
		WHEN ISNULL(@Serie, '') = '' THEN 1
		WHEN @Serie = dbo.Correlativos.serie THEN 1
		ELSE 0
	END = 1 AND
	CASE 
		WHEN @Numero IS NULL THEN 1
		WHEN @Numero = dbo.Ventas.numero THEN 1
		ELSE 0
	END = 1 AND
	CASE
		WHEN @Personal IS NULL THEN 1
		WHEN @Personal = dbo.Ventas.personalID THEN 1
		ELSE 0
	END = 1 AND
	CASE
		WHEN ISNULL(@Estado, '') = '' THEN 1
		WHEN @Estado = dbo.Ventas.estado THEN 1
		ELSE 0
	END = 1
	UNION
	SELECT     
		dbo.Ventas.ventaID AS ID, 
		dbo.Ventas.fechaEmision AS Fecha, 
		CASE
			WHEN dbo.Correlativos.tipoDocumento = 0 THEN 'Boleta'
			WHEN dbo.Correlativos.tipoDocumento = 1 THEN 'Factura'
		END AS Documento, 
		dbo.Correlativos.serie AS Serie, 
		dbo.Ventas.numero AS Numero, 
		dbo.Clientes.apellidos + ' ' + dbo.Clientes.nombres AS Cliente, 
		dbo.Personal.apellidos + ' ' + dbo.Personal.nombres AS Vendedor, 
		dbo.Ventas.estado AS Estado,
        dbo.Insumos.nombre AS Producto, 
        dbo.DetallesVentasInsumos.cantidad AS Cantidad, 
        dbo.DetallesVentasInsumos.precioUnitario AS Precio,
        dbo.DetallesVentasInsumos.cantidad * dbo.DetallesVentasInsumos.precioUnitario AS Total
	FROM dbo.Ventas 
	INNER JOIN dbo.DetallesVentasInsumos ON dbo.Ventas.ventaID = dbo.DetallesVentasInsumos.ventaID 
	INNER JOIN dbo.Clientes ON dbo.Ventas.clienteID = dbo.Clientes.clienteID 
	INNER JOIN dbo.Personal ON dbo.Ventas.personalID = dbo.Personal.personalID 
	INNER JOIN dbo.Insumos ON dbo.DetallesVentasInsumos.insumoID = dbo.Insumos.insumoID 
	INNER JOIN dbo.Correlativos ON dbo.Ventas.correlativoID = dbo.Correlativos.correlativoID
	WHERE (dbo.Ventas.fechaEmision >= @FechaDesde AND dbo.Ventas.fechaEmision <= @FechaHasta) AND
	CASE
		WHEN @Cliente IS NULL THEN 1
		WHEN @Cliente = dbo.Ventas.clienteID THEN 1
		ELSE 0
	END = 1 AND
	CASE
		WHEN @Documento IS NULL THEN 1
		WHEN @Documento = CONVERT(int, dbo.Correlativos.tipoDocumento) THEN 1
		ELSE 0	
	END = 1 AND
	CASE 
		WHEN ISNULL(@Serie, '') = '' THEN 1
		WHEN @Serie = dbo.Correlativos.serie THEN 1
		ELSE 0
	END = 1 AND
	CASE 
		WHEN @Numero IS NULL THEN 1
		WHEN @Numero = dbo.Ventas.numero THEN 1
		ELSE 0
	END = 1 AND
	CASE
		WHEN @Personal IS NULL THEN 1
		WHEN @Personal = dbo.Ventas.personalID THEN 1
		ELSE 0
	END = 1 AND
	CASE
		WHEN ISNULL(@Estado, '') = '' THEN 1
		WHEN @Estado = dbo.Ventas.estado THEN 1
		ELSE 0
	END = 1
	
END

GO


GRANT EXEC ON ReporteVentas TO PUBLIC

GO

